package utils;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class RabbitMqUtils {

    //创建连接MQ的连接工厂对象,工厂属于重量级对象，应该只创建一次
    public static ConnectionFactory connectionFactory;
    static {
        //重量级资源，静态代码块中：类加载时只创建一次
        connectionFactory=new ConnectionFactory();
        //设置连接rabbitMq主机IP
        connectionFactory.setHost("192.168.199.130");
        //设置端口号（amqp协议的端口号）
        connectionFactory.setPort(5672);
        //设置连接哪一个虚拟主机（连接虚拟主机的名字）
        connectionFactory.setVirtualHost("/ems");
        //设置访问虚拟主机的用户名和密码
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");
    }

    /*获取连接对象的方法*/
    public static Connection getConnection() {
        /*//创建连接MQ的连接工厂对象,工厂属于重量级对象，应该只创建一次
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置连接rabbitMq主机IP
        connectionFactory.setHost("192.168.199.128");
        //设置端口号（amqp协议的端口号）
        connectionFactory.setPort(5672);
        //设置连接哪一个虚拟主机（连接虚拟主机的名字）
        connectionFactory.setVirtualHost("/ems");
        //设置访问虚拟主机的用户名和密码
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");*/
        //获取连接对象
        Connection connection = null;
        try {
            connection = connectionFactory.newConnection();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            throw new RuntimeException(e);
        }
        return connection;
    }
    /*关闭通道的方法*/
    public static void  closeConnectionAndChannel(Connection connection, Channel channel){
        try {
            /*为了避免空指针异常，首先判断一下是否为空*/
            if (channel!=null){
                channel.close();
            }
            if (connection!=null){
                connection.close();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            throw new RuntimeException(e);
        }

    }
}
